#include <iostream>


// 实现通用 对数组进行排序的函数
// 规则 从大到小
// 算法 选择排序
// 测试 char 数组、int数组

// 交换函数模板
template<typename T>
void myswap(T &a, T &b)
{
    T temp = a;
    a = b;
    b = temp;
}


// 排序算法
template<typename T>
void mySort( T arr[], int len)
{
    for (int i = 0; i < len; i++) {

        int max = i;
        for (int j = i+1; j < len; j++) {
            if (arr[max] < arr[j]) {
                // 如果 max 是 i不变的话，就会导致找出的 最大数 只是 后面数字序列中 最后一个比 i 位 大的数 而不是 后面数字序列中的 最大序列位
                max = j;
            }
        }

        if (max != i) {
            myswap(arr[max], arr[i]);
        }

    }
}


// 打印数组
template<typename T>
void myprint( T arr[], int len )
{
    for( int i = 0; i < len; i++) {
        std::cout << arr[i];
    }
    std::cout << std::endl;
}

void test01()
{
    // 测试 char 数组
    char charArr[] = "badcfe";
    int num = sizeof(charArr) / sizeof(char);
    mySort(charArr, num);
    myprint(charArr, num);
    // 测试 int 数组
}


void test02()
{
    // 测试 int 数组
    int intArr[] = {1, 5, 2, 7, 3, 8, 9};
    int num = sizeof(intArr) / sizeof(int);
    mySort(intArr, num);
    myprint(intArr, num);
    // 测试 int 数组
}


int main()
{
    test01();
    test02();
    return 0;
}